package de.danielsenff.madds.view;
import java.awt.Dimension;
import java.awt.Font;
import java.io.File;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import javax.swing.JTextPane;
import javax.swing.UIManager;
import javax.swing.event.HyperlinkEvent;
import javax.swing.event.HyperlinkListener;
import javax.swing.text.html.HTMLDocument;
public class MoreWebbableView extends JTextPane {
public MoreWebbableView(String path) {
// add a CSS rule to force body tags to use the default label font
// instead of the value in javax.swing.text.html.default.csss
Font font = UIManager.getFont("Label.font");
String bodyRule = "body { font-family: " + font.getFamily() + "; " +
"font-size: " + font.getSize() + "pt; }";
try {
File file = new File(path);
URL descriptionUrl;
if(file.exists())
descriptionUrl = file.toURL();
else
descriptionUrl = getClass().getResource("/"+path);
setPage(descriptionUrl);
}
catch (Exception e) {
e.printStackTrace();
}
((HTMLDocument)getDocument()).getStyleSheet().addRule(bodyRule);
setOpaque(false);
setEditable(false);
addHyperlinkListener(new HTMLListener());
}
private class HTMLListener implements HyperlinkListener {
public void hyperlinkUpdate(HyperlinkEvent e) {
if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) {
try {
openURL(e.getURL().toURI());
} catch (URISyntaxException e2) {
e2.printStackTrace();
}
}
}
}
public static void openURL(URI uri) {
if( !java.awt.Desktop.isDesktopSupported() ) {
System.err.println( "Desktop is not supported (fatal)" );
System.exit( 1 );
}
java.awt.Desktop desktop = java.awt.Desktop.getDesktop();
if( !desktop.isSupported( java.awt.Desktop.Action.BROWSE ) ) {
System.err.println( "Desktop doesn't support the browse action (fatal)" );
System.exit( 1 );
}
try {
desktop.browse( uri );
}
catch ( Exception e ) {
System.err.println( e.getMessage() );
}
}
public boolean getScrollableTracksViewportWidth() {
return (getSize().width < getParent().getSize().width);
}
public void setSize(Dimension d) {
if (d.width < getParent().getSize().width) {
d.width = getParent().getSize().width;
}
super.setSize(d);
}
}